import { LeaderAttributeType, LeaderModuleType } from "../LeaderEnum";
import { LeaderNumericMap } from "./LeaderNumericMap";

/** 
 * 主角属性对象
 * 1、不同模块设置对应的属性值
 * 2、任意模块的属性值修改时，自动主角属性更新后的数值和
 */
export class LeaderNumeric {
    /** 数值更新事件 */
    onUpdate: Function = null!

    /** 属性类型 */
    type: LeaderAttributeType = null!;

    /** 各模块附加值求和总数值 */
    value: number = 0;
    /** 属性值集合 */
    protected attributes: LeaderNumericMap;
    /** 分组不同模块数值 */
    protected values: Map<LeaderModuleType, number> = new Map();

    constructor(type: LeaderAttributeType, attributes: LeaderNumericMap) {
        this.type = type;
        this.attributes = attributes;

        // 设置初始值
        var rmt = LeaderModuleType;
        for (var key in rmt) {
            var k = Number(key);
            if (k > -1) this.values.set(k, 0);
        }
    }

    /** 获取指定模块属性值 */
    getValue(module: LeaderModuleType) {
        return this.values.get(module);
    }

    /** 设置指定模块属性值 */
    setValue(module: LeaderModuleType, value: number) {
        this.values.set(module, value);
        this.update();
    }

    protected update() {
        var result = 0;
        this.values.forEach(value => {
            result += value;
        });
        this.value = result;

        this.onUpdate && this.onUpdate(this);
    }

    reset() {
        this.values.clear();
        this.update();
    }
}